package com.freemalll.merchant.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.freemalll.merchant.domain.dto.merchantParameters.DTOMerParams;
import com.freemalll.merchant.domain.dto.merchantParameters.ExcelParsingDto;
import com.freemalll.merchant.domain.dto.merchantParameters.MerParamsDetailDTO;
import com.freemalll.merchant.domain.dto.merchantParameters.ParamQueryDTO;
import com.freemalll.merchant.domain.entity.merchantParameters.MerParams;
import com.freemalll.merchant.domain.vo.merchantParameters.MerParamsDetailVO;
import com.freemalll.merchant.domain.vo.merchantParameters.MerParamsListVO;
import jakarta.validation.constraints.NotBlank;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 服务层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
public interface MerParamsService extends IService<MerParams> {

    /**
     * 获取参数模板详情
     *
     * @param key
     * @return
     */
    MerParamsDetailVO detail(String key);

    /**
     * 添加或更新
     *
     * @param merParams
     * @return
     */
    String saveOrUpdate(DTOMerParams merParams);

    /**
     * 删除数据
     *
     * @param id
     * @return
     */
    void deleteById(String id);

    /**
     * 分页查询参数列表
     *
     * @param paramQueryDTO
     * @return
     */
    Page<MerParamsListVO> paramsPageList(ParamQueryDTO paramQueryDTO);

    /**
     * 获取参数详情(带缓存),用于其它页面查询
     *
     * @param paramId
     * @return
     */
    MerParamsDetailVO cacheDetail(String paramId);

    /**
     * 参数导入模板下载
     */
    void templateDownload();

    /**
     * 通过参数模板id导出
     *
     * @param paramId
     */
    void exportParam(String paramId);


    /**
     * 参数导入
     *
     * @param uploadFile
     * @return
     */
    ExcelParsingDto importParam(MultipartFile uploadFile);


    /**
     * 通过参数key获取参数名称
     *
     * @param paramsDetailList
     * @param paramKey
     * @return
     */
    String getParamNameByParamKey(List<MerParamsDetailDTO> paramsDetailList, String paramKey);

    /**
     * 通过参数编码和一级参数编码获取参数详情
     *
     * @param paramCode
     * @param firstLevelCoding
     * @return
     */
    List<MerParamsDetailDTO> getParams(String paramCode, String firstLevelCoding);

    /**
     * 参数转换
     *
     * @param paramString
     * @return
     */
    String translateParamKeys(String paramString);

    /**
     * 场景分类转换
     *
     * @param input
     * @param paramsDetailList
     * @return
     */
    String findParamNameByPrefix(String input, List<MerParamsDetailDTO> paramsDetailList);

    /**
     * 校验品牌名称是否存在，不存在则新增
     *
     * @param brandName
     */
    void checkAndAddBrand(@NotBlank(message = "品牌名称不能为空") String brandName);
}
